# _*_ coding: UTF-8 _*_
# @Time     : 2022/4/21 10:03
# @Author   : Li Jie
# @Site     : http://www.cdtest.cn/
# @File     : 元素的查找和定位.py
# @Software : PyCharm

"""
元素的查找是基于WebDriver的对象driver
元素的操作基于WebElement类
"""
from selenium import webdriver
import time

from selenium.webdriver.common.by import By


def foo1():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get("https://www.baidu.com/")

    # 1.先通过driver找到元素
    element = driver.find_element(By.ID, "kw")

    # 2.对找到元素进行操作
    element.send_keys("51放假安排")  # 模拟键盘输入
    time.sleep(3)

    driver.quit()


def foo2():
    """
    通过name属性定位
    :return: None
    """
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get("https://www.baidu.com/")

    driver.find_element(By.NAME, "wd").send_keys("51放假安排")
    time.sleep(3)

    driver.quit()


def foo3():
    """
    通过classname定位元素
    一般用于定位多个元素
    :return:None
    """
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get("https://www.baidu.com/")

    elements = driver.find_elements(By.CLASS_NAME, "mnav")  # 查找多个元素
    for el in elements:
        print(el.text)  # 打印元素的文本内容
    time.sleep(3)

    driver.quit()


def foo4():
    """
    通过Link text定位元素
    只针对<a>标签，其它类型元素不能用
    :return:None
    """
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get("https://www.baidu.com/")

    driver.find_element(By.LINK_TEXT, '新闻').click()  # 模拟鼠标左键单击
    time.sleep(3)

    driver.quit()


def foo5():
    """
    通过Partial Link text定位元素
    通过部分链接文本定位
    只针对<a>标签，其它类型元素不能用
    :return:None
    """
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get("https://www.baidu.com/")

    driver.find_element(By.PARTIAL_LINK_TEXT, 'hao').click()  # 模拟鼠标左键单击
    time.sleep(3)

    driver.quit()


def foo6():
    """
    通过tag name定位元素
    通过标签名定位多个元素
    :return:None
    """
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get("https://www.baidu.com/")

    els = driver.find_elements(By.TAG_NAME, "a")
    for el in els:
        print(el.text)

    driver.quit()


def foo7():
    """
    通过css selector定位元素
    通过css选择器定位元素
    :return:None
    """
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get("https://www.baidu.com/")

    driver.find_element(By.CSS_SELECTOR, "#s-top-left > a:nth-child(3)").click()
    time.sleep(3)

    driver.quit()


def foo8():
    """
    通过xpath定位元素
    最强大最慢的定位方式
    :return:None
    """
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get("https://www.baidu.com/")

    driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[4]').click()
    time.sleep(3)

    driver.quit()


if __name__ == "__main__":
    # foo1()
    # foo2()
    # foo3()
    # foo4()
    # foo5()
    # foo6()
    # foo7()
    foo8()
